﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Controllers;

namespace GestorDeFlotasDesktop.Listados
{
    public partial class lstRelojes : Form
    {

        #region Inicializador

        public lstRelojes()
        {
            InitializeComponent();
        }

        #endregion

        #region Propiedades

        public Operacion operacion { get; set; }

        private const int registrosPorPagina = 10;

        private string where = "";

        #endregion

        #region Eventos

        private void lstRelojes_Load(object sender, EventArgs e)
        {
            CargarMarcas();
            CargarGrilla();
        }

        private void btnLimpiar_Click(object sender, EventArgs e)
        {
            txtNroSerie.Text = "";
            cboModelo.SelectedIndex = 0;
            cboMarca.SelectedIndex = 0;

            where = "";
            lblPagina.Text = "1";
            CalcularCantidadRegistros();
            ActualizarGrilla(Convert.ToInt32(lblPagina.Text));
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            where = "";

            if (!string.IsNullOrEmpty(txtNroSerie.Text))
            {
                where = "Reloj_NumeroSerie like '%" + txtNroSerie.Text + "%'";
            }
            if (((ModeloReloj)cboModelo.SelectedItem).MoRe_Id != 0)
            {
                if (!string.IsNullOrEmpty(where)) where += " AND ";
                where += "Reloj_ModeloId = " + ((ModeloReloj)cboModelo.SelectedItem).MoRe_Id;
            }
            else if (((MarcaReloj)cboMarca.SelectedItem).MaRe_Id != 0)
            {
                if (!string.IsNullOrEmpty(where)) where += " AND ";
                where += "Mare_Id = " + ((MarcaReloj)cboMarca.SelectedItem).MaRe_Id;
            }

            
            CalcularCantidadRegistros();
            lblPagina.Text = "1";
            ActualizarGrilla(Convert.ToInt32(lblPagina.Text));

        }

        

        #endregion

        #region Grilla

        private void CalcularCantidadRegistros()
        {
            var cantidadRegistros = RelojController.ObtenerCantidad(where);

            var cantidadPaginas = cantidadRegistros / registrosPorPagina;
            if (cantidadRegistros % registrosPorPagina > 0) // if remainder is more than  zero 
            {
                cantidadPaginas += 1;
            }

            lblCantidadPaginasTotales.Text = cantidadPaginas.ToString();
        }

        private void CargarMarcas()
        {
            cboMarca.DataSource = RelojController.ObtenerMarcas(0);
            cboMarca.DisplayMember = "MaRe_Nombre";
            cboMarca.ValueMember = "MaRe_Id";
        }

        private void CargarModelos(int marcaId)
        {
            cboModelo.DataSource = RelojController.ObtenerModelos(marcaId);
            cboModelo.DisplayMember = "MoRe_Nombre";
            cboModelo.ValueMember = "MoRe_Id";
        }


        private void CargarGrilla()
        {
            gvwRelojes.AutoGenerateColumns = false;
            where = "";
            lblPagina.Text = "1";

            CalcularCantidadRegistros();
            ActualizarGrilla(Convert.ToInt32(lblPagina.Text));

            var colId = new DataGridViewTextBoxColumn
            {
                DataPropertyName = "Reloj_Id",
                Name = "Reloj_Id",
                HeaderText = "Id",
                ReadOnly = true,
                Width = 50
            };
            gvwRelojes.Columns.Add(colId);

            var colMarca = new DataGridViewTextBoxColumn
            {
                DataPropertyName = "Reloj_MarcaNombre",
                Name = "MaRe_Nombre",
                HeaderText = "Marca",
                ReadOnly = true,
                Width = 120
            };
            gvwRelojes.Columns.Add(colMarca);

            var colModelo = new DataGridViewTextBoxColumn
            {
                DataPropertyName = "Reloj_ModeloNombre",
                Name = "MoRe_Nombre",
                HeaderText = "Modelo",
                ReadOnly = true,
                Width = 120
            };
            gvwRelojes.Columns.Add(colModelo);

            var colNumeroSerie = new DataGridViewTextBoxColumn
            {
                DataPropertyName = "Reloj_NumeroSerie",
                Name = "NumeroSerie",
                HeaderText = "Nro de Serie",
                ReadOnly = true,
                Width = 120
            };
            gvwRelojes.Columns.Add(colNumeroSerie);

            var colHabilitado = new DataGridViewCheckBoxColumn
            {
                DataPropertyName = "Reloj_Habilitado",
                Name = "Reloj_Habilitado",
                HeaderText = "Habilitado",
                ReadOnly = true,
                Width = 80
            };
            gvwRelojes.Columns.Add(colHabilitado);

            var colBoton = new DataGridViewButtonColumn
            {
                Name = "Boton",
                HeaderText = "",
                ReadOnly = true,
                Width = 80,
                UseColumnTextForButtonValue = true
            };


            switch (operacion)
            {
                case Operacion.Baja:
                    colBoton.Text = "Eliminar";
                    break;
                case Operacion.Modificacion:
                    colBoton.Text = "Modificar";
                    break;
                case Operacion.Seleccion:
                    colBoton.Text = "Seleccionar";
                    break;
                default:
                    break;

            }
            gvwRelojes.Columns.Add(colBoton);

        }

        private void gvwRelojes_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (operacion == Operacion.Seleccion)
            {
                //definir como voy a devolver la seleccion
                return;
            }

            // Ignora clicks que no son a botones 
            if (e.RowIndex < 0 || e.ColumnIndex !=
                gvwRelojes.Columns["Boton"].Index) return;

            var Reloj = ((Reloj)gvwRelojes.CurrentRow.DataBoundItem);
            
            var abmReloj = new AbmReloj
            {
                MdiParent = this.MdiParent,
                operacion = operacion,
                reloj = Reloj,
                parentForm = this
            };

            abmReloj.Show();

        }

        public void ActualizarGrilla()
        {
            ActualizarGrilla(Convert.ToInt32(lblPagina.Text));
        }

        private void ActualizarGrilla(int pagina)
        {
            lblCartelDe.Visible = true;
            lblPagina.Visible = true;
            lblCantidadPaginasTotales.Visible = true;
            btnUltimaPagina.Enabled = true;
            btnProximaPagina.Enabled = true;
            btnPaginaAnterior.Enabled = true;
            btnPrimeraPagina.Enabled = true;

            lblCartelPagina.Text = "Mostrando página";

            gvwRelojes.DataSource = RelojController.ObtenerTodos(where, pagina, registrosPorPagina);

            var cantidadPaginas = Convert.ToInt32(lblCantidadPaginasTotales.Text);

            if (cantidadPaginas == 1)
            {
                btnUltimaPagina.Enabled = false;
                btnProximaPagina.Enabled = false;
                btnPaginaAnterior.Enabled = false;
                btnPrimeraPagina.Enabled = false;
            }
            else if (cantidadPaginas == 0)
            {
                btnUltimaPagina.Enabled = false;
                btnProximaPagina.Enabled = false;
                btnPaginaAnterior.Enabled = false;
                btnPrimeraPagina.Enabled = false;

                lblCartelDe.Visible = false;
                lblPagina.Visible = false;
                lblCantidadPaginasTotales.Visible = false;

                lblCartelPagina.Text = "No hay registros disponibles";
            }
            else
            {
                if (lblPagina.Text == lblCantidadPaginasTotales.Text)
                {
                    btnUltimaPagina.Enabled = false;
                    btnProximaPagina.Enabled = false;
                }
                else if (lblPagina.Text == "1")
                {
                    btnPrimeraPagina.Enabled = false;
                    btnPaginaAnterior.Enabled = false;
                }
            }
        }

        #endregion


        #region Paginador

        private void btnProximaPagina_Click(object sender, EventArgs e)
        {
            var pagina = Convert.ToInt32(lblPagina.Text);
            pagina++;
            lblPagina.Text = pagina.ToString();
            ActualizarGrilla(pagina);
        }

        private void btnPaginaAnterior_Click(object sender, EventArgs e)
        {
            var pagina = Convert.ToInt32(lblPagina.Text);
            pagina--;
            lblPagina.Text = pagina.ToString();
            ActualizarGrilla(pagina);
        }

        private void btnUltimaPagina_Click(object sender, EventArgs e)
        {
            lblPagina.Text = lblCantidadPaginasTotales.Text;
            ActualizarGrilla(Convert.ToInt32(lblPagina.Text));
        }

        private void btnPrimeraPagina_Click(object sender, EventArgs e)
        {
            lblPagina.Text = "1";
            ActualizarGrilla(Convert.ToInt32(lblPagina.Text));
        }
       
        #endregion

        private void cboMarca_SelectedIndexChanged(object sender, EventArgs e)
        {
            CargarModelos(((MarcaReloj)cboMarca.SelectedItem).MaRe_Id);
            
        }

       
        

       

    }
}

